package com.org.gundutubruk;

import java.io.Serializable;
import java.util.ArrayList;

import android.content.Context;

public class PlayerHolder implements Serializable{
	
	/*
	 * jumlah player yang bisa disimpan disini tidak dibatasi
	 */
	
	private static final long serialVersionUID = 1L;
	public ArrayList<Player> AllPlayer = new ArrayList<Player>();//kosong, deserialize dulu biar diisi		
	
	public Player get(int i) {
		return AllPlayer.get(i);
	}
	
	public void add(Player player) {
		AllPlayer.add(player);
	}
	
	public int size() {
		return AllPlayer.size();
	}
	
	public void delete(String name) {//delete player dengan nama tersebut
		for(int i=0;i<AllPlayer.size();i++) {
			if(name.equals(AllPlayer.get(i).name)) {//jika ada yang sama, hapus
				AllPlayer.remove(i);
				break;
			}
		}
	}
	
	//custom protocol buat serialisasi
	private synchronized void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
		out.defaultWriteObject();		
	}
	
	//custom protocol buat serialisasi
	private synchronized void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
		in.defaultReadObject();
	}
	
	public boolean checkNamePlayerExist(String name) {
		for(int i=0;i<AllPlayer.size();i++) {
			if(name.equals(AllPlayer.get(i).name)) {
				return true;
			}
		}
		return false;
	}
	
	public Player getPlayerWithName(String name) {
		for(int i=0;i<AllPlayer.size();i++) {
			if(AllPlayer.get(i).name.equals(name)) {
				return AllPlayer.get(i);
			}
		}
		return null;//tidak ada player dengan nama tersebut
	}
	
	/*
	 *jumlah kelereng yang didapat adalah gunduMenang - taruhan, fungsi ini mengupdate data2 player
	 *fungsi ini valid jika kelereng yang dijadikan taruhan TIDAK termasuk kelereng yang digunakan pemain
	 *untuk menyentil. mode permainan yang tidak valid menggunakan ini contohnya mode DUEL
	 */	
	public void updatePlayerData(Context context,String namaPlayer, int gunduMenang, int taruhan,boolean win) {
		if(gunduMenang >= 0 && getPlayerWithName(namaPlayer)!=null) {
			Player player = getPlayerWithName(namaPlayer);
			player.gameplayed++;
			player.jumlahGundu -= taruhan;
			player.jumlahGundu += gunduMenang;	
			if(win) {//jika menang
				player.wincount++;				
			}
			//jika sudah menang untuk kesekian kali
			//update unlock level (NOTE if nya mengurut ke bawah makin kecil)
			if(player.wincount>=10) {
				player.unlockLevel = 5;
			}else if(player.wincount>=8) {
				player.unlockLevel = 4;
			}else if(player.wincount>=6) {
				player.unlockLevel = 3;
			}else if(player.wincount>=4) {
				player.unlockLevel = 2;
			}else if(player.wincount>=2) {
				player.unlockLevel = 1;
			}else{
				player.unlockLevel = 0;
			}
		}
		Utility.serializePlayerHolder(context);//save objek
	}
}
